package com.finanzas.general.dao.impl;

import java.io.Serializable;
import java.util.List;
import java.lang.reflect.ParameterizedType;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import com.finanzas.general.dao.GeneralDao;


public class GeneralDaoImpl<T, ID extends Serializable>  implements
		GeneralDao<T, ID> {

	@PersistenceContext(unitName = "finanzaSacoPU")
	protected EntityManager em;
	protected Class<T> tipoEntidad;

	@SuppressWarnings("unchecked")
	protected GeneralDaoImpl() {
		Class<T> class1 = (Class<T>) ((ParameterizedType) getClass()
				.getGenericSuperclass()).getActualTypeArguments()[0];
		this.tipoEntidad = class1;
	}
    

	public void guardar(T entidad) {
		em.persist(entidad);
	}
	
	public void actualizar(T entidad) {
		em.merge(entidad);
	}
	
	public void borrar(T entidad) {
		em.remove(entidad);
	}

	public T buscarPorId(ID id) {
		return em.find(tipoEntidad, id);
	}

	
	public List<T> buscarTodo() {
		List<T> entidades = null;
		Query query = em.createQuery("select e from PagoSocio e");
		query.getResultList();
		return entidades;
	}

	public void refrescar(T entidad) {
		em.refresh(entidad);
	}

	public EntityManager getEm() {
		return em;
	}

	public void setEm(EntityManager em) {
		this.em = em;
	}

}
